%% 
%给定的二值图像矩阵BW
BW = [0  0  0  1  1  1  1  1    
           0  0  0  1  0  0  1  1
           0  0  0  1  0  0  1  1
           0  0  0  1  1  1  0  1
           0  0  0  1  1  1  0  1
           0  0  0  1  1  1  0  1
           0  0  0  1  1  0  0  1   
           0  0  0  1  1  1  1  1 ]; 
imshow(BW);

%%
% %根据4连通准则判定目标
% L4 = bwlabel(BW,4);
% imshow(L4);
% L4

%%
A = imread('rice.png');
imshow(A);
level = graythresh(A);   
B = im2bw(A, level);
figure,imshow(B);

%%
clc
img = imread('ycl.jpg');
I = rgb2gray(img);
imshow(I);
Roberts = edge(I,'roberts');    %进行Roberts算子边缘检测，门限值采用matlab默认值
Sobel = edge(I,'prewitt');    %进行Prewitt算子边缘检测，门限值采用matlab默认值
Prewitt = edge(I,'sobel');      %进行Sobel算子边缘检测，门限值采用matlab默认值
LoG = edge(I,'Canny');      % Canny算子的检测比较优越，它可以减少小模板检测中边缘中断，有利于得到较完整的边缘。
figure,imshow(Roberts);
figure,imshow(Sobel);
figure,imshow(Prewitt); 
figure,imshow(LoG); 

%%
img = imread(['zxd.jpg']);
I = rgb2gray(img);
imshow(I);
LoG = edge(I,'log');
figure,imshow(LoG,[]); 

%% 编制程序：
% 分别利用Roberts、Sobel、Prewitt、LoG和Canny算子，实现对图像rice.png进行边缘检测
% 并在同一窗口下显示原图和处理后图片，处理后图像分别以算子命名。
clc; clear; close all;
image=imread('rice.png');
Roberts=edge(image,'roberts');
Sobel=edge(image,'sobel');
Prewitt=edge(image,'prewitt');
LoG=edge(image,'log');
Canny = edge(image,'Canny');    
subplot(231); imshow(image);    title("原图");
subplot(232); imshow(Roberts);  title("Roberts");
subplot(233); imshow(Sobel);    title("Sobel");
subplot(234); imshow(Prewitt);  title("Prewitt");
subplot(235); imshow(LoG);      title("LoG");
subplot(236); imshow(Canny);    title("Canny");






